/*
 * PilaCondicional.cpp
 */

#include "PilaCondicional.h"

bool PilaCondicional::marcarDefValida() {
	if(this->pilaIfs.size() < CANT_MAX_IF_ANIDADOS) {
		this->pilaIfs.push(CHR_DEF_VALIDA);
		return true;
	}
	return false;
}

bool PilaCondicional::marcarDefInvalida() {
	if(this->pilaIfs.size() < CANT_MAX_IF_ANIDADOS) {
		this->pilaIfs.push(CHR_DEF_INVALIDA);
		return true;
	}
	return false;
}

bool PilaCondicional::marcarElse() {
	if(!this->pilaIfs.empty()) {
		if(this->pilaIfs.top() == CHR_DEF_INVALIDA)
			this->pilaIfs.top() = CHR_DEF_VALIDA;
		else
			this->pilaIfs.top() = CHR_DEF_INVALIDA;
		return true;
	}
	return false;
}

bool PilaCondicional::marcarEndIf() {
	if(!this->pilaIfs.empty()) {
		this->pilaIfs.pop();
		return true;
	}
	return false;
}

bool PilaCondicional::validezUltimaDirectiva() const {
	if(this->pilaIfs.empty() || this->pilaIfs.top() == CHR_DEF_VALIDA)
		return true;
	return false;
}
